package shuaige.jdk.stream.collectors相关的方法;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

public class Reducing {
    static List<String> list = Arrays.asList("123", "456", "789", "1101", "212121121", "asdaa", "3e3e3e", "2321eew");

    public static void main(String[] args) {
        有初始值和处理();
    }

    /**
     * 无初始值的情况，返回一个可以生成Optional结果的Collector
     */
    public static void 无初始值() {
        Optional<Integer> collect = list.stream().limit(4).map(String::length).collect(Collectors.reducing((integer, integer2) -> {
            return integer+integer2;
        }));
        System.out.println(collect.get());
    }

    /**
     * 有初始值的情况，返回一个可以直接产生结果的Collector
     */
    public static void 有初始值() {
        Integer collect = list.stream().limit(3).map(String::length).collect(Collectors.reducing(0, Integer::sum));
        System.out.println(collect);
    }

    /**
     * 有初始值，还有针对元素的处理方案mapper，生成一个可以直接产生结果的Collector，元素在执行结果操作op之前需要先执行mapper进行元素转换操作
     */
    public static void 有初始值和处理() {
        Integer collect = list.stream().limit(4).collect(Collectors.reducing(0, String::length, Integer::sum));
        System.out.println(collect);
    }

}
